home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: Alpha / Whiteline Alpha.iso / dl_serie / 042 / ltmfprg2 / do_sampl.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-09-25  |  2.6 KB  |  124 lines

  1. /* ------------------------------------------------------------------------- */
  2. /* ----- Let 'em Fly!  form_do() Sample ------------------------------------ */
  3. /* ------------------------------------------------------------------------- */
  4.  
  5. #include <aes.h>
  6. #include <tos.h>
  7.  
  8. #include <ltmf_lib.h>
  9.  
  10. #define    TRUE    (!0)
  11.  
  12. /* ------------------------------------------------------------------------- */
  13.  
  14. #define FMD_BACKWARD    -1
  15. #define FMD_FORWARD    1
  16. #define FMD_DEFLT    0
  17.  
  18. int find_obj(OBJECT *tree, int start_obj, int which)
  19. {
  20.     int    obj,
  21.         flag, theflag,
  22.         inc;
  23.  
  24.     obj = 0;
  25.     flag = EDITABLE;
  26.     inc = 1;
  27.     switch(which)
  28.     {
  29.         case FMD_BACKWARD :    inc = -1;
  30.         case FMD_FORWARD  :    obj = start_obj + inc;
  31.                     break;
  32.         case FMD_DEFLT    :    flag = DEFAULT;
  33.                 break;
  34.     }
  35.     while(obj >= 0) 
  36.     {
  37.         theflag = tree[obj].ob_flags;
  38.         if(theflag & flag)
  39.             return(obj);
  40.         if (theflag & LASTOB)
  41.             obj = -1;
  42.         else
  43.             obj += inc;
  44.     }
  45.     return(start_obj);
  46. }
  47.  
  48. int fm_inifld(OBJECT *tree, int start_fld)
  49. {
  50.     if(start_fld == 0)
  51.         start_fld = find_obj(tree, 0, FMD_FORWARD);
  52.     return(start_fld);
  53. }
  54.  
  55. /* ------------------------------------------------------------------------- */
  56.  
  57. int my_form_do(OBJECT *tree, int start_fld)
  58. {
  59.     int    edit_obj,
  60.         next_obj,
  61.         which, cont,
  62.         idx = 0,
  63.         mx, my, mb, ks, kr, br;
  64.     int    keys,
  65.         kb_obj;
  66.     int    msg[8];
  67.  
  68.     next_obj = fm_inifld(tree, start_fld);
  69.     keys = init_keys(tree);
  70.     edit_obj = 0;
  71.     cont = TRUE;
  72.     while(cont)
  73.     {
  74.         if((next_obj != 0) && (edit_obj != next_obj))
  75.         {
  76.             edit_obj = next_obj;
  77.             next_obj = 0;
  78.             objc_edit(tree, edit_obj, 0, &idx, ED_INIT);
  79.         }
  80.         which = evnt_multi(MU_KEYBD|MU_BUTTON,
  81.                 0x02, 0x01, 0x01,
  82.                 0, 0, 0, 0, 0,
  83.                 0, 0, 0, 0, 0,
  84.                 msg,
  85.                 0, 0,
  86.                 &mx, &my, &mb, &ks, &kr, &br);
  87.         if(which & MU_KEYBD)
  88.         {
  89.             kb_obj = keys ? lookup_key(kr, ks) : 0;
  90.             if(kb_obj)
  91.                 cont = form_button(tree, kb_obj, 0x01, &next_obj);
  92.             else
  93.             {
  94.                 cont = form_keybd(tree, edit_obj, next_obj, kr, &next_obj, &kr);
  95.                 if(kr)
  96.                     objc_edit(tree, edit_obj, kr, &idx, ED_CHAR);
  97.             }
  98.         }
  99.         if(which & MU_BUTTON)
  100.         {
  101.             next_obj = objc_find(tree, ROOT, MAX_DEPTH, mx, my);
  102.             if(next_obj == -1)
  103.             {
  104.                 if(!di_moveto(tree, mx, my))
  105.                     Bconout(2, 7);
  106.                 next_obj = 0;
  107.             }
  108.             else if((tree[next_obj].ob_flags & 0xff) == NONE)
  109.             {
  110.                 if(br == 2)
  111.                     di_center(tree);
  112.                 else
  113.                     di_fly(tree);    /* Let 'em Fly! */
  114.                 next_obj = 0;
  115.             }
  116.             else
  117.                 cont = form_button(tree, next_obj, br, &next_obj);
  118.         }
  119.         if((!cont) || ((next_obj != 0) && (next_obj != edit_obj)))
  120.             objc_edit(tree, edit_obj, 0, &idx, ED_END);
  121.     }
  122.     return(next_obj);
  123. }
  124.